classdef ElementTypeEnum
    % 单元枚举类，定义单元编号，单元名，节点数量，维度，单节点自由度
    
    enumeration
        TRUSS (1, 'TrussElement', 2, 3, 3)   % 空间桁架：每节点3自由度
        TRI3   (2, 'Tri3Element', 3, 2, 2)    % 平面三角形：每节点2自由度
        QUAD4  (3, 'Quad4Element', 4, 2, 2)
        TET4   (4, 'Tet4Element', 4, 3, 3)
        HEX8   (5, 'Hex8Element', 8, 3, 3)
    end

    properties
        Code           % 对应前处理软件的单元编号（如 Gmsh 类型号）
        ClassName      % 对应的单元类名
        NodePerElem    % 单元节点数
        Dimension      % 空间维度
        DofPerNode     % 每个节点的自由度数
    end

    methods
        function obj = ElementTypeEnum(code, className, nNode, dim, dofPerNode)
            obj.Code = code;
            obj.ClassName = className;
            obj.NodePerElem = nNode;
            obj.Dimension = dim;
            obj.DofPerNode = dofPerNode;
        end
    end

    methods (Static)
        function e = fromCode(code)
            list = enumeration('ElementTypeEnum');
            for k = 1:numel(list)
                if list(k).Code == code
                    e = list(k);
                    return;
                end
            end
            error('ElementTypeEnum.fromCode: unsupported code %d', code);
        end
    end
end
